/*
 * @Author: your name
 * @Date: 2021-08-24 00:00:05
 * @LastEditTime: 2022-02-12 22:10:00
 * @LastEditors: Please set LastEditors
 * @Description: 确认框窗口
 * @FilePath: \phone\src\confirmation_win.h
 */
#ifndef CONFIRMATION_WIN_H
#define CONFIRMATION_WIN_H
#include "common_define.h"
#include "gui_engine.h"
#include "page_handle.h"
#include "phone_key_event.h"
#define CONFIRMATION_WIN_NAME "confirmation_page"
class KeyEventConfirmationWin : public KeyCmdMapTable {
public:
    KeyEventConfirmationWin()
    {
        // table[static_cast<int>(KeyboardValue::KEY_SOFT_KEY_1)] = KeyCmd::KEY_SOFT_KEY_1;
        table[static_cast<int>(KeyboardValue::KEY_SOFT_KEY_4)] = KeyCmd::KEY_SOFT_KEY_4;
    }
};
class ConfirmationPage : public PageHandle, public ConfirmTips, public PhoneKeyEvent {
public:
    ConfirmationPage();
    ~ConfirmationPage() = default;
    static void OpenConfirmationPage(ConfirmationPage* page);
    void StartDisplay();
    void SetTips(std::string value);
    void SetKeepTime(unsigned int time);
    void SetTrText(std::string textName);
    void SetConfirmtaionType(ConfirmationType type);
    void SetConfirmCallback(void (*event)(bool, void*), void* ctx);
    void SetOnlyConfirm(bool onlyConfirm);
    void SetConfirmTrText(std::string trText);
    void Soft1() override;
    void Soft4() override;

private:
    /**
     * @brief
     * utf-8编码字符，用于无需译文的确认框
     */
    std::string tips;
    /**
     * @brief
     * 窗口保持时间，暂未使用。可用于拓展超时自动退出功能。
     * 0-永久停留
     */
    unsigned int keepTime;
    /**
     * @brief
     * 支持译文的确认框，当tips与trText同时设置时，优先使用译文
     */
    std::string trText;
    /**
     * @brief
     * 确认框类型
     */
    ConfirmationType type;
    /**
     * @brief
     * 确认框按钮事件，包括“确定”和“取消”按钮；
     * bool-是按下“取消”还是“确定”，true-确定，false-取消；
     * void*-确认框上下文；
     */
    void (*confirmEvent)(bool, void*);
    /**
     * @brief
     * 确认框上下文，通过回调函数回传给具体的应用。
     */
    void* ctx;
    /**
     * @brief
     * true - 只有“确认”按钮；false - 同时具备“取消”和“确认”按钮。
     * 默认true。
     */
    bool onlyConfirm;
    /**
     * @brief
     * 确认按钮译文，不设置时，默认为“确认”
     */
    std::string confirmTrText;
};
#endif